{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "5529de62",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-08T10:31:51.027474Z",
     "iopub.status.busy": "2021-08-08T10:31:51.025695Z",
     "iopub.status.idle": "2021-08-08T10:31:53.660936Z",
     "shell.execute_reply": "2021-08-08T10:31:53.660195Z",
     "shell.execute_reply.started": "2021-08-06T13:17:53.938945Z"
    },
    "papermill": {
     "duration": 2.667371,
     "end_time": "2021-08-08T10:31:53.661118",
     "exception": false,
     "start_time": "2021-08-08T10:31:50.993747",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style type='text/css'>\n",
       ".datatable table.frame { margin-bottom: 0; }\n",
       ".datatable table.frame thead { border-bottom: none; }\n",
       ".datatable table.frame tr.coltypes td {  color: #FFFFFF;  line-height: 6px;  padding: 0 0.5em;}\n",
       ".datatable .bool    { background: #DDDD99; }\n",
       ".datatable .object  { background: #565656; }\n",
       ".datatable .int     { background: #5D9E5D; }\n",
       ".datatable .float   { background: #4040CC; }\n",
       ".datatable .str     { background: #CC4040; }\n",
       ".datatable .time    { background: #40CC40; }\n",
       ".datatable .row_index {  background: var(--jp-border-color3);  border-right: 1px solid var(--jp-border-color0);  color: var(--jp-ui-font-color3);  font-size: 9px;}\n",
       ".datatable .frame tbody td { text-align: left; }\n",
       ".datatable .frame tr.coltypes .row_index {  background: var(--jp-border-color0);}\n",
       ".datatable th:nth-child(2) { padding-left: 12px; }\n",
       ".datatable .hellipsis {  color: var(--jp-cell-editor-border-color);}\n",
       ".datatable .vellipsis {  background: var(--jp-layout-color0);  color: var(--jp-cell-editor-border-color);}\n",
       ".datatable .na {  color: var(--jp-cell-editor-border-color);  font-size: 80%;}\n",
       ".datatable .sp {  opacity: 0.25;}\n",
       ".datatable .footer { font-size: 9px; }\n",
       ".datatable .frame_dimensions {  background: var(--jp-border-color3);  border-top: 1px solid var(--jp-border-color0);  color: var(--jp-ui-font-color3);  display: inline-block;  opacity: 0.6;  padding: 1px 10px 1px 5px;}\n",
       "</style>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Importing core libraries\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from time import time\n",
    "import pprint\n",
    "import joblib\n",
    "\n",
    "# Suppressing warnings because of skopt verbosity\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "\n",
    "# Classifiers\n",
    "import lightgbm as lgb\n",
    "\n",
    "# Model selection\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "# Metrics\n",
    "from sklearn.metrics import roc_auc_score\n",
    "from sklearn.metrics import make_scorer\n",
    "\n",
    "# Skopt functions\n",
    "from skopt import BayesSearchCV\n",
    "from skopt.callbacks import DeadlineStopper, DeltaYStopper\n",
    "from skopt.space import Real, Categorical, Integer\n",
    "\n",
    "# Plotting functions\n",
    "import seaborn as sns\n",
    "from matplotlib import pyplot as plt\n",
    "#sns.set(style='whitegrid')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "22b090e8",
   "metadata": {
    "papermill": {
     "duration": 0.024789,
     "end_time": "2021-08-08T10:31:53.711307",
     "exception": false,
     "start_time": "2021-08-08T10:31:53.686518",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "## 1. First steps"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "afcb8673",
   "metadata": {
    "papermill": {
     "duration": 0.024473,
     "end_time": "2021-08-08T10:31:53.760783",
     "exception": false,
     "start_time": "2021-08-08T10:31:53.736310",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "As first steps: \n",
    "* we load the train and test data from disk\n",
    "* we separate the target from the training data\n",
    "* we separate the ids from the test data (thus train and test data have the same structure)\n",
    "* we convert integer variables to categories (thus our machine learning algorithm can pick them as categorical variables and not standard numeric one)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "50567be8",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-08T10:31:53.817412Z",
     "iopub.status.busy": "2021-08-08T10:31:53.816668Z",
     "iopub.status.idle": "2021-08-08T10:31:54.092966Z",
     "shell.execute_reply": "2021-08-08T10:31:54.093482Z",
     "shell.execute_reply.started": "2021-08-06T13:17:53.952783Z"
    },
    "papermill": {
     "duration": 0.308129,
     "end_time": "2021-08-08T10:31:54.093672",
     "exception": false,
     "start_time": "2021-08-08T10:31:53.785543",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# Loading data \n",
    "X = pd.read_csv(\"../input/amazon-employee-access-challenge/train.csv\")\n",
    "X_test = pd.read_csv(\"../input/amazon-employee-access-challenge/test.csv\")\n",
    "\n",
    "# Separating the target from the predictors\n",
    "y = X[\"ACTION\"]\n",
    "X.drop([\"ACTION\"], axis=\"columns\", inplace=True)\n",
    "\n",
    "# Separating the identifier from the test data\n",
    "ids = X_test[\"id\"]\n",
    "X_test.drop(\"id\", axis=\"columns\", inplace=True)\n",
    "\n",
    "# Converting all integer variables to categorical\n",
    "integer_cols = X.select_dtypes(include=['int']).columns\n",
    "X[integer_cols] = X[integer_cols].astype('category', copy=False)\n",
    "X_test[integer_cols] = X_test[integer_cols].astype('category', copy=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "31f56b8c",
   "metadata": {
    "papermill": {
     "duration": 0.024819,
     "end_time": "2021-08-08T10:31:54.143331",
     "exception": false,
     "start_time": "2021-08-08T10:31:54.118512",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# 2. EDA"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "795bac41",
   "metadata": {
    "papermill": {
     "duration": 0.02471,
     "end_time": "2021-08-08T10:31:54.193231",
     "exception": false,
     "start_time": "2021-08-08T10:31:54.168521",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "At this point we have a look at the training and test data in order to figure out how we can process the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "0cdf0d15",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-08T10:31:54.250132Z",
     "iopub.status.busy": "2021-08-08T10:31:54.248931Z",
     "iopub.status.idle": "2021-08-08T10:31:54.287707Z",
     "shell.execute_reply": "2021-08-08T10:31:54.287060Z",
     "shell.execute_reply.started": "2021-08-06T13:17:54.1476Z"
    },
    "papermill": {
     "duration": 0.069212,
     "end_time": "2021-08-08T10:31:54.287849",
     "exception": false,
     "start_time": "2021-08-08T10:31:54.218637",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Unique values\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>train</th>\n",
       "      <th>test</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>RESOURCE</th>\n",
       "      <td>7518</td>\n",
       "      <td>4971</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MGR_ID</th>\n",
       "      <td>4243</td>\n",
       "      <td>4689</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ROLE_ROLLUP_1</th>\n",
       "      <td>128</td>\n",
       "      <td>126</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ROLE_ROLLUP_2</th>\n",
       "      <td>177</td>\n",
       "      <td>177</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ROLE_DEPTNAME</th>\n",
       "      <td>449</td>\n",
       "      <td>466</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ROLE_TITLE</th>\n",
       "      <td>343</td>\n",
       "      <td>351</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ROLE_FAMILY_DESC</th>\n",
       "      <td>2358</td>\n",
       "      <td>2749</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ROLE_FAMILY</th>\n",
       "      <td>67</td>\n",
       "      <td>68</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ROLE_CODE</th>\n",
       "      <td>343</td>\n",
       "      <td>351</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  train  test\n",
       "RESOURCE           7518  4971\n",
       "MGR_ID             4243  4689\n",
       "ROLE_ROLLUP_1       128   126\n",
       "ROLE_ROLLUP_2       177   177\n",
       "ROLE_DEPTNAME       449   466\n",
       "ROLE_TITLE          343   351\n",
       "ROLE_FAMILY_DESC   2358  2749\n",
       "ROLE_FAMILY          67    68\n",
       "ROLE_CODE           343   351"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(\"Unique values\")\n",
    "(pd.concat([X.apply(lambda x: len(x.unique())), \n",
    "            X_test.apply(lambda x: len(x.unique()))\n",
    "           ], axis=\"columns\")\n",
    " .rename(columns={0: \"train\", 1:\"test\"}))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "34013e09",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-08T10:31:54.347197Z",
     "iopub.status.busy": "2021-08-08T10:31:54.346493Z",
     "iopub.status.idle": "2021-08-08T10:31:54.376151Z",
     "shell.execute_reply": "2021-08-08T10:31:54.375361Z",
     "shell.execute_reply.started": "2021-08-06T13:17:54.188275Z"
    },
    "papermill": {
     "duration": 0.061251,
     "end_time": "2021-08-08T10:31:54.376296",
     "exception": false,
     "start_time": "2021-08-08T10:31:54.315045",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Values in test but not in train\n",
      "RESOURCE             2547\n",
      "MGR_ID                224\n",
      "ROLE_ROLLUP_1           4\n",
      "ROLE_ROLLUP_2           6\n",
      "ROLE_DEPTNAME          10\n",
      "ROLE_TITLE             10\n",
      "ROLE_FAMILY_DESC      202\n",
      "ROLE_FAMILY             0\n",
      "ROLE_CODE              10\n"
     ]
    }
   ],
   "source": [
    "print(\"Values in test but not in train\")\n",
    "for col in integer_cols:\n",
    "    mismatched_codes = len(np.setdiff1d(X[col].unique(), X_test[col].unique()))\n",
    "    print(f\"{col:20} {mismatched_codes:4}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "8142d90a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-08T10:31:54.431562Z",
     "iopub.status.busy": "2021-08-08T10:31:54.430631Z",
     "iopub.status.idle": "2021-08-08T10:31:54.449077Z",
     "shell.execute_reply": "2021-08-08T10:31:54.449657Z",
     "shell.execute_reply.started": "2021-08-06T13:17:54.225486Z"
    },
    "papermill": {
     "duration": 0.047678,
     "end_time": "2021-08-08T10:31:54.449829",
     "exception": false,
     "start_time": "2021-08-08T10:31:54.402151",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Missing cases\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>train</th>\n",
       "      <th>test</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>RESOURCE</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MGR_ID</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ROLE_ROLLUP_1</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ROLE_ROLLUP_2</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ROLE_DEPTNAME</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ROLE_TITLE</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ROLE_FAMILY_DESC</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ROLE_FAMILY</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ROLE_CODE</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  train  test\n",
       "RESOURCE              0     0\n",
       "MGR_ID                0     0\n",
       "ROLE_ROLLUP_1         0     0\n",
       "ROLE_ROLLUP_2         0     0\n",
       "ROLE_DEPTNAME         0     0\n",
       "ROLE_TITLE            0     0\n",
       "ROLE_FAMILY_DESC      0     0\n",
       "ROLE_FAMILY           0     0\n",
       "ROLE_CODE             0     0"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(\"Missing cases\")\n",
    "(pd.concat([X.isna().sum(), \n",
    "           X_test.isna().sum()\n",
    "           ], axis=\"columns\")\n",
    " .rename(columns={0: \"train\", 1:\"test\"}))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "4fb22965",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-08T10:31:54.506756Z",
     "iopub.status.busy": "2021-08-08T10:31:54.505805Z",
     "iopub.status.idle": "2021-08-08T10:31:54.749927Z",
     "shell.execute_reply": "2021-08-08T10:31:54.750367Z",
     "shell.execute_reply.started": "2021-08-06T13:17:54.248883Z"
    },
    "papermill": {
     "duration": 0.274262,
     "end_time": "2021-08-08T10:31:54.750548",
     "exception": false,
     "start_time": "2021-08-08T10:31:54.476286",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnAAAAFzCAYAAAC+bzSQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAakUlEQVR4nO3df/BddX3n8efLRNRZtaBElg2xYWu6Ft02aIqIzqzCLgRmx+AupbBrCQ5r2BE6ujqu2HYGV2WmtFV32FUqSobgVAOiLmmNshSxjKsgQVgwKOW7KCURIRIEu05lwff+cT/R2/Sb5Ibk3vv95Pt8zJz5nvs+v95nzgRfnnM/96SqkCRJUj+eMe0GJEmStHcMcJIkSZ0xwEmSJHXGACdJktQZA5wkSVJnDHCSJEmdWTjtBibt0EMPraVLl067DUmSpD267bbbflhVi3auz7sAt3TpUjZt2jTtNiRJkvYoyf2z1X2EKkmS1BkDnCRJUmcMcJIkSZ0xwEmSJHXGACdJktQZA5wkSVJnDHCSJEmdMcBJkiR1xgAnSZLUGQOcJElSZwxwkiRJnTHASZIkdcYAJ0mS1BkDnCRJ6tbiJS8mycSnxUtePNXzXjjVo0uSJO2D7295gN/+2Ncmftyrzj1u4scc5h04SZKkzhjgJEmSOmOAkyRJ6owBTpIkqTNjC3BJnp3kG0n+d5LNSf5Lqx+Z5JYkM0muSnJQqz+rfZ5py5cO7es9rX5PkpOG6itbbSbJBeM6F0mSpLlknHfgfgocX1W/ASwHViY5FrgY+HBVvQR4FDinrX8O8Girf7itR5KjgDOAlwErgY8mWZBkAfAR4GTgKODMtq4kSdIBbWwBrgb+tn18ZpsKOB64ptXXAae2+VXtM235CUnS6uur6qdV9V1gBjimTTNVdV9VPQGsb+tKkiQd0Mb6Hbh2p+wO4GHgeuD/AD+qqifbKluAxW1+MfAAQFv+GPDC4fpO2+yqPlsfa5JsSrJp27Zt++HMJEmSpmesAa6qnqqq5cARDO6YvXScx9tNH5dV1YqqWrFo0aJptCBJkrTfTGQUalX9CLgReDVwcJIdb4A4Atja5rcCSwDa8l8CHhmu77TNruqSJEkHtHGOQl2U5OA2/xzgXwHfZhDkTmurrQaubfMb2mfa8i9XVbX6GW2U6pHAMuAbwK3Asjaq9SAGAx02jOt8JEmS5opxvgv1cGBdGy36DODqqvqLJHcD65N8ALgduLytfznwySQzwHYGgYyq2pzkauBu4EngvKp6CiDJ+cB1wAJgbVVtHuP5SJIkzQljC3BVdSdw9Cz1+xh8H27n+t8Bv7WLfV0EXDRLfSOwcZ+blSRJ6ohvYpAkSeqMAU6SJKkzBjhJkqTOGOAkSZI6Y4CTJEnqjAFOkiSpMwY4SZKkzhjgJEmSOmOAkyRJ6owBTpIkqTMGOEmSpM4Y4CRJkjpjgJMkSeqMAU6SJKkzBjhJkqTOGOAkSZI6Y4CTJEnqjAFOkiSpMwY4SZKkzhjgJEmSOmOAkyRJ6owBTpIkqTMGOEmSpM4Y4CRJkjpjgJMkSeqMAU6SJKkzBjhJkqTOGOAkSZI6Y4CTJEnqjAFOkiSpMwY4SZKkzhjgJEmSOmOAkyRJ6owBTpIkqTMGOEmSpM4Y4CRJkjpjgJMkSeqMAU6SJKkzBjhJkqTOGOAkSZI6Y4CTJEnqzNgCXJIlSW5McneSzUne1urvTbI1yR1tOmVom/ckmUlyT5KThuorW20myQVD9SOT3NLqVyU5aFznI0mSNFeM8w7ck8A7q+oo4FjgvCRHtWUfrqrlbdoI0JadAbwMWAl8NMmCJAuAjwAnA0cBZw7t5+K2r5cAjwLnjPF8JEmS5oSxBbiqerCqvtnmfwx8G1i8m01WAeur6qdV9V1gBjimTTNVdV9VPQGsB1YlCXA8cE3bfh1w6lhORpIkaQ6ZyHfgkiwFjgZuaaXzk9yZZG2SQ1ptMfDA0GZbWm1X9RcCP6qqJ3eqz3b8NUk2Jdm0bdu2/XFKkiRJUzP2AJfkucBngbdX1ePApcCvAMuBB4EPjruHqrqsqlZU1YpFixaN+3CSJEljtXCcO0/yTAbh7c+q6nMAVfXQ0PKPA3/RPm4FlgxtfkSrsYv6I8DBSRa2u3DD60uSJB2wxjkKNcDlwLer6kND9cOHVnsj8K02vwE4I8mzkhwJLAO+AdwKLGsjTg9iMNBhQ1UVcCNwWtt+NXDtuM5HkiRprhjnHbjXAL8D3JXkjlb7PQajSJcDBXwPOBegqjYnuRq4m8EI1vOq6imAJOcD1wELgLVVtbnt793A+iQfAG5nEBglSZIOaGMLcFX1VSCzLNq4m20uAi6apb5xtu2q6j4Go1QlSZLmDd/EIEmS1BkDnCRJUmcMcJIkSZ0xwEmSJHXGACdJktQZA5wkSVJnDHCSJEmdMcBJkiR1xgAnSZLUGQOcJElSZwxwkiRJnTHASZIkdcYAJ0mS1BkDnCRJUmcMcJIkSZ0xwEmSJHXGACdJktQZA5wkSVJnDHCSJEmdMcBJkiR1xgAnSZLUGQOcJElSZwxwkiRJnTHASZIkdcYAJ0mS1BkDnCRJUmcMcJIkSZ0xwEmSJHXGACdJktQZA5wkSVJnDHCSJEmdMcBJkiR1xgAnSZLUGQOcJElSZwxwkiRJnTHASZIkdcYAJ0mS1BkDnCRJUmcMcJIkSZ0xwEmSJHXGACdJktSZsQW4JEuS3Jjk7iSbk7yt1V+Q5Pok97a/h7R6klySZCbJnUleMbSv1W39e5OsHqq/MsldbZtLkmRc5yNJkjRXjPMO3JPAO6vqKOBY4LwkRwEXADdU1TLghvYZ4GRgWZvWAJfCIPABFwKvAo4BLtwR+to6bxnabuUYz0eSJGlOGFuAq6oHq+qbbf7HwLeBxcAqYF1bbR1waptfBVxZAzcDByc5HDgJuL6qtlfVo8D1wMq27PlVdXNVFXDl0L4kSZIOWBP5DlySpcDRwC3AYVX1YFv0A+CwNr8YeGBosy2ttrv6llnqkiRJB7SxB7gkzwU+C7y9qh4fXtbunNUEeliTZFOSTdu2bRv34SRJksZqrAEuyTMZhLc/q6rPtfJD7fEn7e/Drb4VWDK0+RGttrv6EbPU/4GquqyqVlTVikWLFu3bSUmSJE3ZOEehBrgc+HZVfWho0QZgx0jS1cC1Q/Wz2mjUY4HH2qPW64ATkxzSBi+cCFzXlj2e5Nh2rLOG9iVJknTAWjjGfb8G+B3griR3tNrvAX8IXJ3kHOB+4PS2bCNwCjAD/AR4M0BVbU/yfuDWtt77qmp7m38rcAXwHOCLbZIkSTqgjS3AVdVXgV39LtsJs6xfwHm72NdaYO0s9U3Ay/ehTUmSpO74JgZJkqTOGOAkSZI6Y4CTJEnqjAFOkiSpMwY4SZKkzhjgJEmSOmOAkyRJ6owBTpIkqTMGOEmSpM4Y4CRJkjpjgJMkSeqMAU6SJKkzBjhJkqTOGOAkSZI6Y4CTJEnqjAFOkiSpMwY4SZKkzhjgJEmSOmOAkyRJ6owBTpIkqTMjBbgkrxmlJkmSpPEb9Q7cfxuxJkmSpDFbuLuFSV4NHAcsSvKOoUXPBxaMszFJkiTNbrcBDjgIeG5b73lD9ceB08bVlCRJknZttwGuqv4K+KskV1TV/RPqSZIkSbuxpztwOzwryWXA0uFtqur4cTQlSZKkXRs1wH0G+FPgE8BT42tHkiRJezJqgHuyqi4dayeSJEkayag/I/LnSd6a5PAkL9gxjbUzSZIkzWrUO3Cr2993DdUK+Kf7tx1JkiTtyUgBrqqOHHcjkiRJGs1IAS7JWbPVq+rK/duOJEmS9mTUR6i/OTT/bOAE4JuAAU6SJGnCRn2E+rvDn5McDKwfR0OSJEnavVFHoe7s/wJ+L06SJGkKRv0O3J8zGHUKg5fY/xpw9biakiRJ0q6N+h24PxmafxK4v6q2jKEfSZIk7cFIj1DbS+2/AzwPOAR4YpxNSZIkaddGCnBJTge+AfwWcDpwS5LTxtmYJEmSZjfqI9TfB36zqh4GSLII+EvgmnE1JkmSpNmNOgr1GTvCW/PIXmwrSZKk/WjUEPalJNclOTvJ2cAXgI272yDJ2iQPJ/nWUO29SbYmuaNNpwwte0+SmST3JDlpqL6y1WaSXDBUPzLJLa1+VZKDRj1pSZKknu02wCV5SZLXVNW7gI8Bv96mrwOX7WHfVwArZ6l/uKqWt2ljO85RwBnAy9o2H02yIMkC4CPAycBRwJltXYCL275eAjwKnLPHs5UkSToA7OkO3H8FHgeoqs9V1Tuq6h3A59uyXaqqm4DtI/axClhfVT+tqu8CM8AxbZqpqvuq6gkGb39YlSTA8fziO3jrgFNHPJYkSVLX9hTgDququ3YuttrSp3nM85Pc2R6xHtJqi4EHhtbZ0mq7qr8Q+FFVPblTXZIk6YC3pwB38G6WPedpHO9S4FeA5cCDwAefxj72WpI1STYl2bRt27ZJHFKSJGls9hTgNiV5y87FJP8BuG1vD1ZVD1XVU1X1M+DjDB6RAmwFlgytekSr7ar+CHBwkoU71Xd13MuqakVVrVi0aNHeti1JkjSn7Ol34N4OfD7Jv+cXgW0FcBDwxr09WJLDq+rB9vGNwI4RqhuATyX5EPBPgGUMfjg4wLIkRzIIaGcA/66qKsmNwGkMvhe3Grh2b/uRJEnq0W4DXFU9BByX5PXAy1v5C1X15T3tOMmngdcBhybZAlwIvC7JcqCA7wHntuNsTnI1cDeDd62eV1VPtf2cD1wHLADWVtXmdoh3A+uTfAC4Hbh8xHOWJEnq2khvYqiqG4Eb92bHVXXmLOVdhqyqugi4aJb6Rmb5zbmquo9fPIKVJEmaN3ybgiRJUmcMcJIkSZ0xwEmSJHXGACdJktQZA5wkSVJnDHCSJEmdMcBJkiR1xgAnSZLUGQOcJElSZwxwkiRJnTHASZIkdcYAJ0mS1BkDnCRJUmcMcJIkSZ0xwEmSJHXGACdJktQZA5wkSVJnDHCSJEmdMcBJkiR1xgAnSZLUGQOcJElSZwxwkiRJnTHASZIkdcYAJ0mS1BkDnCRJUmcMcJIkSZ0xwEmSJHXGACdJktQZA5wkSVJnDHCSJEmdMcBJkiR1xgAnSZLUGQOcJElSZwxwkiRJnTHASZIkdcYAJ0mS1BkDnCRJUmcMcJIkSZ0xwEmSJHXGACdJktQZA5wkSVJnDHCSJEmdGVuAS7I2ycNJvjVUe0GS65Pc2/4e0upJckmSmSR3JnnF0Dar2/r3Jlk9VH9lkrvaNpckybjORZIkaS4Z5x24K4CVO9UuAG6oqmXADe0zwMnAsjatAS6FQeADLgReBRwDXLgj9LV13jK03c7HkiRJOiCNLcBV1U3A9p3Kq4B1bX4dcOpQ/coauBk4OMnhwEnA9VW1vaoeBa4HVrZlz6+qm6uqgCuH9iVJknRAm/R34A6rqgfb/A+Aw9r8YuCBofW2tNru6ltmqc8qyZokm5Js2rZt276dgSRJ0pRNbRBDu3NWEzrWZVW1oqpWLFq0aBKHlCRJGptJB7iH2uNP2t+HW30rsGRovSNabXf1I2apS5IkHfAmHeA2ADtGkq4Grh2qn9VGox4LPNYetV4HnJjkkDZ44UTgurbs8STHttGnZw3tS5Ik6YC2cFw7TvJp4HXAoUm2MBhN+ofA1UnOAe4HTm+rbwROAWaAnwBvBqiq7UneD9za1ntfVe0YGPFWBiNdnwN8sU2SJEkHvLEFuKo6cxeLTphl3QLO28V+1gJrZ6lvAl6+Lz1KkiT1yDcxSJIkdcYAJ0mS1BkDnCRJUmcMcJIkSZ0xwEmSJHXGACdJktQZA5wkSVJnDHCSJEmdMcBJkiR1xgAnSZLUGQOcJElSZwxwkiRJnTHASZIkdcYAJ0mS1BkDnCRJUmcMcJIkSZ0xwEmSJHXGACdJktQZA5wkSVJnDHCSJEmdMcBJkiR1xgAnSZLUGQOcJElSZwxwkiRJnTHASZIkdcYAJ0mS1BkDnCRJUmcMcJIkSZ0xwEmSJHXGACdJktQZA5wkSVJnDHCSJEmdMcBJkiR1xgAnSZLUGQOcJElSZwxwkiRJnTHASZIkdcYAJ0mS1BkDnCRJUmcMcJIkSZ0xwEmSJHVmKgEuyfeS3JXkjiSbWu0FSa5Pcm/7e0irJ8klSWaS3JnkFUP7Wd3WvzfJ6mmciyRJ0qRN8w7c66tqeVWtaJ8vAG6oqmXADe0zwMnAsjatAS6FQeADLgReBRwDXLgj9EmSJB3I5tIj1FXAuja/Djh1qH5lDdwMHJzkcOAk4Pqq2l5VjwLXAysn3LMkSdLETSvAFfA/k9yWZE2rHVZVD7b5HwCHtfnFwAND225ptV3V/4Eka5JsSrJp27Zt++scJEmSpmLhlI772qramuRFwPVJvjO8sKoqSe2vg1XVZcBlACtWrNhv+5UkSZqGqdyBq6qt7e/DwOcZfIftofZolPb34bb6VmDJ0OZHtNqu6pIkSQe0iQe4JP8oyfN2zAMnAt8CNgA7RpKuBq5t8xuAs9po1GOBx9qj1uuAE5Mc0gYvnNhqkiRJB7RpPEI9DPh8kh3H/1RVfSnJrcDVSc4B7gdOb+tvBE4BZoCfAG8GqKrtSd4P3NrWe19VbZ/caUiSJE3HxANcVd0H/MYs9UeAE2apF3DeLva1Fli7v3uUJEmay+bSz4hIkiRpBAY4SZKkzhjgJEmSOmOAkyRJ6owBTpIkqTMGOEmSpM4Y4CRJkjpjgJMkSeqMAU6SJKkzBjhJkqTOGOAkSZI6Y4CTJEnqjAFOkiSpMwY4SZKkzhjgJEmSOmOAkyRJ6owBTpIkqTMGOEmSpM4Y4CRJkjpjgJMkSeqMAU6SJKkzBjhJkqTOGOAkSZI6Y4CTJEnqjAFOkiSpMwY4SZKkzhjgxmDxkheTZOLT4iUvnvapS5KkCVg47QYORN/f8gC//bGvTfy4V5173MSPKUmSJs87cJIkSZ0xwEmSJHXGACdJktQZA5wkSVJnDHCSJEmdMcBJkiR1xgAnSZLUGQOcJElSZwxwkiRJnTHASZIkdcYAJ0mS1BkDnCRJUmcMcJIkSZ3pPsAlWZnkniQzSS6Ydj+SJEnj1nWAS7IA+AhwMnAUcGaSo6bblSRJ0nh1HeCAY4CZqrqvqp4A1gOrptyTJEnSWPUe4BYDDwx93tJqkiRJB6yF025gEpKsAda0j3+b5J4xH/LQq8497odjPsaskkzjsL04FJjKddEueU3mHq/J3OR12Y2rzj1uGoc9NMkkrskvz1bsPcBtBZYMfT6i1f6eqroMuGxSTSXZVFUrJnU8jcbrMvd4TeYer8nc5HWZe6Z9TXp/hHorsCzJkUkOAs4ANky5J0mSpLHq+g5cVT2Z5HzgOmABsLaqNk+5LUmSpLHqOsABVNVGYOO0+9jJxB7Xaq94XeYer8nc4zWZm7wuc89Ur0mqaprHlyRJ0l7q/TtwkiRJ844Bbh/s6TVeSZ6V5Kq2/JYkS6fQ5rwywjV5R5K7k9yZ5IYksw7P1v416ivvkvzbJJXE0XZjNso1SXJ6+/eyOcmnJt3jfDTCf8NenOTGJLe3/46dMo0+55Mka5M8nORbu1ieJJe0a3ZnkldMoi8D3NM04mu8zgEeraqXAB8GLp5sl/PLiNfkdmBFVf06cA3wR5Ptcv4Z9ZV3SZ4HvA24ZbIdzj+jXJMky4D3AK+pqpcBb590n/PNiP9W/gC4uqqOZvDLCx+dbJfz0hXAyt0sPxlY1qY1wKUT6MkAtw9GeY3XKmBdm78GOCH+0u447fGaVNWNVfWT9vFmBr8dqPEa9ZV372fwf3L+bpLNzVOjXJO3AB+pqkcBqurhCfc4H41yXQp4fpv/JeD7E+xvXqqqm4Dtu1llFXBlDdwMHJzk8HH3ZYB7+kZ5jdfP16mqJ4HHgBdOpLv5aW9frXYO8MWxdiQY4bq0Rw5LquoLk2xsHhvl38qvAr+a5H8luTnJ7u5AaP8Y5bq8F3hTki0MfoHhdyfTmnZjKq/17P5nRKSnI8mbgBXAv5h2L/NdkmcAHwLOnnIr+vsWMngk9DoGd6pvSvLPq+pH02xKnAlcUVUfTPJq4JNJXl5VP5t2Y5os78A9faO8xuvn6yRZyOB29yMT6W5+GunVakn+JfD7wBuq6qcT6m0+29N1eR7wcuArSb4HHAtscCDDWI3yb2ULsKGq/l9VfRf4awaBTuMzynU5B7gaoKq+DjybwXtSNT0j/W/P/maAe/pGeY3XBmB1mz8N+HL5w3vjtMdrkuRo4GMMwpvf6ZmM3V6Xqnqsqg6tqqVVtZTBdxPfUFWbptPuvDDKf7/+B4O7byQ5lMEj1fsm2ON8NMp1+RvgBIAkv8YgwG2baJfa2QbgrDYa9Vjgsap6cNwH9RHq07Sr13gleR+wqao2AJczuL09w+ALkGdMr+MD34jX5I+B5wKfaeNJ/qaq3jC1pueBEa+LJmjEa3IdcGKSu4GngHdVlU8QxmjE6/JO4ONJ/hODAQ1ne2NgvJJ8msH/mTm0fffwQuCZAFX1pwy+i3gKMAP8BHjzRPryukuSJPXFR6iSJEmdMcBJkiR1xgAnSZLUGQOcJElSZwxwkiRJnTHASZr3kpyapJK8dKh2TJKbktyT5PYkn0hyXpI72vREkrva/B8mOTvJfx/afk2S77TpG0leO7TsK0k2DX1ekeQrEzthSd0zwEnS4PVEX21/SXIY8Bng3VX1z6rqaOBLwDVVtbyqljN4ifjr2+cLhneW5F8D5wKvraqXAv8R+FSSfzy02ouSnDzuE5N0YDLASZrXkjwXeC2DVxTt+LHt84B17VVFAFTVNVX10Ii7fTeDH779Ydv2m8C6tt8d/pjBK90kaa8Z4CTNd6uAL1XVXwOPJHklg3ez3rYP+3zZLNtvavUdvg48keT1+3AcSfOUAU7SfHcmsL7Nr2+fJ+UDwB9M8HiSDhAGOEnzVpIXAMcDn0jyPeBdwOnAZuCV+7Dru2fZ/pVtvz9XVV8GngMcuw/HkjQPGeAkzWenAZ+sql+uqqVVtQT4LvCXwOokr9qxYpJ/0wY3jOKPgIuTvLBtuxw4G/joLOt+APjPT/8UJM1HC6fdgCRN0ZnAxTvVPstgMMMZwJ8keRHwM+AmBiNR96iqNiRZDHwtSQE/Bt5UVQ/Osu7GJNv24RwkzUOpqmn3IEmSpL3gI1RJkqTOGOAkSZI6Y4CTJEnqjAFOkiSpMwY4SZKkzhjgJEmSOmOAkyRJ6owBTpIkqTP/Hwmx49QXuTxOAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# label distribution\n",
    "fig, ax = plt.subplots(1, 1, figsize=(10, 6))\n",
    "sns.histplot(y, ax=ax)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "10174f66",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-08T10:31:54.811062Z",
     "iopub.status.busy": "2021-08-08T10:31:54.810008Z",
     "iopub.status.idle": "2021-08-08T10:32:41.097457Z",
     "shell.execute_reply": "2021-08-08T10:32:41.098007Z",
     "shell.execute_reply.started": "2021-08-06T13:17:54.477078Z"
    },
    "papermill": {
     "duration": 46.32037,
     "end_time": "2021-08-08T10:32:41.098206",
     "exception": false,
     "start_time": "2021-08-08T10:31:54.777836",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1728x1584 with 10 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Distribution of values of variables\n",
    "_ = X.astype(int).hist(bins='auto', figsize=(24, 22), layout=(5, 2))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ffe30087",
   "metadata": {
    "papermill": {
     "duration": 0.029158,
     "end_time": "2021-08-08T10:32:41.157249",
     "exception": false,
     "start_time": "2021-08-08T10:32:41.128091",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "From the EDA we can get a few hints about what to do:\n",
    "* the target classes are unbalanced, we should consider re-balancing the data\n",
    "* all the categorical features have a different number of values ranging from 70 to up to over 7000 (high cardinality features)\n",
    "* there are no missing values but many categorical values appear just in test, not in train (this especially affects the RESOURCE feature)\n",
    "* the categorical values are sparse"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "81dcec72",
   "metadata": {
    "papermill": {
     "duration": 0.029332,
     "end_time": "2021-08-08T10:32:41.216901",
     "exception": false,
     "start_time": "2021-08-08T10:32:41.187569",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# 3. Feature engineering"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "56448223",
   "metadata": {
    "papermill": {
     "duration": 0.02957,
     "end_time": "2021-08-08T10:32:41.277051",
     "exception": false,
     "start_time": "2021-08-08T10:32:41.247481",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "As the categorical features are sparsed and mismatched, we replace the original values with contiguous values, substituing with the value -1 in the test set for values that are not present in the train set. This operation should permit the LightGBM "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "99c04f37",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-08T10:32:41.339426Z",
     "iopub.status.busy": "2021-08-08T10:32:41.338797Z",
     "iopub.status.idle": "2021-08-08T10:32:41.430951Z",
     "shell.execute_reply": "2021-08-08T10:32:41.430385Z",
     "shell.execute_reply.started": "2021-08-06T13:18:42.188202Z"
    },
    "papermill": {
     "duration": 0.124494,
     "end_time": "2021-08-08T10:32:41.431090",
     "exception": false,
     "start_time": "2021-08-08T10:32:41.306596",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RESOURCE : [0, 38, 136, 138, 153] ... [312136, 312139, 312140, 312152, 312153]\n",
      "MGR_ID : [25, 27, 30, 32, 33] ... [311597, 311651, 311682, 311683, 311696]\n",
      "ROLE_ROLLUP_1 : [4292, 5110, 11146, 91261, 117876] ... [203209, 209434, 216705, 247952, 311178]\n",
      "ROLE_ROLLUP_2 : [23779, 31010, 32137, 117877, 117883] ... [151110, 159716, 176316, 185842, 286791]\n",
      "ROLE_DEPTNAME : [4674, 5488, 5606, 6104, 6725] ... [272283, 274241, 275600, 277693, 286792]\n",
      "ROLE_TITLE : [117879, 117885, 117896, 117899, 117905] ... [297560, 299559, 307024, 310825, 311867]\n",
      "ROLE_FAMILY_DESC : [4673, 62587, 117879, 117886, 117897] ... [311782, 311792, 311834, 311839, 311867]\n",
      "ROLE_FAMILY : [3130, 4673, 6725, 19721, 19793] ... [254395, 270488, 290919, 292795, 308574]\n",
      "ROLE_CODE : [117880, 117888, 117898, 117900, 117908] ... [254396, 258436, 266863, 268610, 270691]\n"
     ]
    }
   ],
   "source": [
    "for col in integer_cols:\n",
    "    unique_values = sorted(X[col].unique())\n",
    "    print(col, \":\", unique_values[:5],'...', unique_values[-5:])\n",
    "    conversion_dict = dict(zip(unique_values, range(len(unique_values))))\n",
    "    # When working with the Categorical’s codes, missing values will always have a code of -1.\n",
    "    X[col] = X[col].map(conversion_dict, na_action=-1).astype('category', copy=False)\n",
    "    X_test[col] = X_test[col].map(conversion_dict, na_action=-1).astype('category', copy=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "507c4177",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-08T10:32:41.497566Z",
     "iopub.status.busy": "2021-08-08T10:32:41.496947Z",
     "iopub.status.idle": "2021-08-08T10:32:41.513758Z",
     "shell.execute_reply": "2021-08-08T10:32:41.513116Z",
     "shell.execute_reply.started": "2021-08-06T13:18:42.291384Z"
    },
    "papermill": {
     "duration": 0.052603,
     "end_time": "2021-08-08T10:32:41.513898",
     "exception": false,
     "start_time": "2021-08-08T10:32:41.461295",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Missing cases\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>train</th>\n",
       "      <th>test</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>RESOURCE</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MGR_ID</th>\n",
       "      <td>0</td>\n",
       "      <td>1627</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ROLE_ROLLUP_1</th>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ROLE_ROLLUP_2</th>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ROLE_DEPTNAME</th>\n",
       "      <td>0</td>\n",
       "      <td>62</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ROLE_TITLE</th>\n",
       "      <td>0</td>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ROLE_FAMILY_DESC</th>\n",
       "      <td>0</td>\n",
       "      <td>1249</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ROLE_FAMILY</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ROLE_CODE</th>\n",
       "      <td>0</td>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  train  test\n",
       "RESOURCE              0     0\n",
       "MGR_ID                0  1627\n",
       "ROLE_ROLLUP_1         0     4\n",
       "ROLE_ROLLUP_2         0    12\n",
       "ROLE_DEPTNAME         0    62\n",
       "ROLE_TITLE            0    30\n",
       "ROLE_FAMILY_DESC      0  1249\n",
       "ROLE_FAMILY           0     1\n",
       "ROLE_CODE             0    30"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(\"Missing cases\")\n",
    "pd.concat([X.isna().sum(), X_test.isna().sum()], axis=\"columns\").rename(columns={0: \"train\", 1:\"test\"})"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4e379e6c",
   "metadata": {
    "papermill": {
     "duration": 0.030913,
     "end_time": "2021-08-08T10:32:41.575454",
     "exception": false,
     "start_time": "2021-08-08T10:32:41.544541",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# 4. Setting up optimization"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "12141ee8",
   "metadata": {
    "papermill": {
     "duration": 0.030686,
     "end_time": "2021-08-08T10:32:41.637135",
     "exception": false,
     "start_time": "2021-08-08T10:32:41.606449",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "First, we create a wrapper function to deal with running the optimizer and reporting back its best results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "60ea770e",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-08T10:32:41.707290Z",
     "iopub.status.busy": "2021-08-08T10:32:41.706679Z",
     "iopub.status.idle": "2021-08-08T10:32:41.709564Z",
     "shell.execute_reply": "2021-08-08T10:32:41.710001Z",
     "shell.execute_reply.started": "2021-08-06T13:18:42.320205Z"
    },
    "papermill": {
     "duration": 0.041537,
     "end_time": "2021-08-08T10:32:41.710158",
     "exception": false,
     "start_time": "2021-08-08T10:32:41.668621",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# Reporting util for different optimizers\n",
    "def report_perf(optimizer, X, y, title=\"model\", callbacks=None):\n",
    "    \"\"\"\n",
    "    A wrapper for measuring time and performances of different optmizers\n",
    "    \n",
    "    optimizer = a sklearn or a skopt optimizer\n",
    "    X = the training set \n",
    "    y = our target\n",
    "    title = a string label for the experiment\n",
    "    \"\"\"\n",
    "    start = time()\n",
    "    \n",
    "    if callbacks is not None:\n",
    "        optimizer.fit(X, y, callback=callbacks)\n",
    "    else:\n",
    "        optimizer.fit(X, y)\n",
    "        \n",
    "    d=pd.DataFrame(optimizer.cv_results_)\n",
    "    best_score = optimizer.best_score_\n",
    "    best_score_std = d.iloc[optimizer.best_index_].std_test_score\n",
    "    best_params = optimizer.best_params_\n",
    "    \n",
    "    print((title + \" took %.2f seconds,  candidates checked: %d, best CV score: %.3f \"\n",
    "           + u\"\\u00B1\"+\" %.3f\") % (time() - start, \n",
    "                                   len(optimizer.cv_results_['params']),\n",
    "                                   best_score,\n",
    "                                   best_score_std))    \n",
    "    print('Best parameters:')\n",
    "    pprint.pprint(best_params)\n",
    "    print()\n",
    "    return best_params"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "28324c65",
   "metadata": {
    "papermill": {
     "duration": 0.030683,
     "end_time": "2021-08-08T10:32:41.771651",
     "exception": false,
     "start_time": "2021-08-08T10:32:41.740968",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "We then define the evaluation metric, using the Scikit-learn function make_scorer allows us to convert the optimization into a minimization problem, as required by Scikit-optimize."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "def9b447",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-08T10:32:41.837897Z",
     "iopub.status.busy": "2021-08-08T10:32:41.837151Z",
     "iopub.status.idle": "2021-08-08T10:32:41.840366Z",
     "shell.execute_reply": "2021-08-08T10:32:41.839772Z",
     "shell.execute_reply.started": "2021-08-06T13:18:42.333385Z"
    },
    "papermill": {
     "duration": 0.038146,
     "end_time": "2021-08-08T10:32:41.840508",
     "exception": false,
     "start_time": "2021-08-08T10:32:41.802362",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# Converting average precision score into a scorer suitable for model selection\n",
    "roc_auc = make_scorer(roc_auc_score, greater_is_better=True, needs_threshold=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aa915deb",
   "metadata": {
    "papermill": {
     "duration": 0.030526,
     "end_time": "2021-08-08T10:32:41.901937",
     "exception": false,
     "start_time": "2021-08-08T10:32:41.871411",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "We set up a stratified 5-fold cross validation: stratification helps us to obtain representative folds of the data and the target, though the target is unbalanced."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "e8e6cb97",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-08T10:32:41.968318Z",
     "iopub.status.busy": "2021-08-08T10:32:41.967566Z",
     "iopub.status.idle": "2021-08-08T10:32:41.969668Z",
     "shell.execute_reply": "2021-08-08T10:32:41.969059Z",
     "shell.execute_reply.started": "2021-08-06T13:18:42.344906Z"
    },
    "papermill": {
     "duration": 0.037367,
     "end_time": "2021-08-08T10:32:41.969803",
     "exception": false,
     "start_time": "2021-08-08T10:32:41.932436",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# Setting a 5-fold stratified cross-validation (note: shuffle=True)\n",
    "skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1eb89ddb",
   "metadata": {
    "papermill": {
     "duration": 0.030623,
     "end_time": "2021-08-08T10:32:42.031287",
     "exception": false,
     "start_time": "2021-08-08T10:32:42.000664",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "We set up a generic LightGBM classifier."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "7ca382ab",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-08T10:32:42.098981Z",
     "iopub.status.busy": "2021-08-08T10:32:42.098285Z",
     "iopub.status.idle": "2021-08-08T10:32:42.101039Z",
     "shell.execute_reply": "2021-08-08T10:32:42.100435Z",
     "shell.execute_reply.started": "2021-08-06T13:18:42.358319Z"
    },
    "papermill": {
     "duration": 0.038905,
     "end_time": "2021-08-08T10:32:42.101168",
     "exception": false,
     "start_time": "2021-08-08T10:32:42.062263",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "clf = lgb.LGBMClassifier(boosting_type='gbdt',\n",
    "                         metric='auc',\n",
    "                         objective='binary',\n",
    "                         n_jobs=1, \n",
    "                         verbose=-1,\n",
    "                         random_state=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6071c5dc",
   "metadata": {
    "papermill": {
     "duration": 0.03115,
     "end_time": "2021-08-08T10:32:42.163932",
     "exception": false,
     "start_time": "2021-08-08T10:32:42.132782",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "We define a search space, expliciting the key hyper-parameters to optimize and the range where to look for the best values."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "b6862ce5",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-08T10:32:42.236559Z",
     "iopub.status.busy": "2021-08-08T10:32:42.235906Z",
     "iopub.status.idle": "2021-08-08T10:32:42.245697Z",
     "shell.execute_reply": "2021-08-08T10:32:42.246221Z",
     "shell.execute_reply.started": "2021-08-06T13:18:42.371004Z"
    },
    "papermill": {
     "duration": 0.051273,
     "end_time": "2021-08-08T10:32:42.246389",
     "exception": false,
     "start_time": "2021-08-08T10:32:42.195116",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "search_spaces = {\n",
    "    'learning_rate': Real(0.01, 1.0, 'log-uniform'),     # Boosting learning rate\n",
    "    'n_estimators': Integer(30, 5000),                   # Number of boosted trees to fit\n",
    "    'num_leaves': Integer(2, 512),                       # Maximum tree leaves for base learners\n",
    "    'max_depth': Integer(-1, 256),                       # Maximum tree depth for base learners, <=0 means no limit\n",
    "    'min_child_samples': Integer(1, 256),                # Minimal number of data in one leaf\n",
    "    'max_bin': Integer(100, 1000),                       # Max number of bins that feature values will be bucketed\n",
    "    'subsample': Real(0.01, 1.0, 'uniform'),             # Subsample ratio of the training instance\n",
    "    'subsample_freq': Integer(0, 10),                    # Frequency of subsample, <=0 means no enable\n",
    "    'colsample_bytree': Real(0.01, 1.0, 'uniform'),      # Subsample ratio of columns when constructing each tree\n",
    "    'min_child_weight': Real(0.01, 10.0, 'uniform'),     # Minimum sum of instance weight (hessian) needed in a child (leaf)\n",
    "    'reg_lambda': Real(1e-9, 100.0, 'log-uniform'),      # L2 regularization\n",
    "    'reg_alpha': Real(1e-9, 100.0, 'log-uniform'),       # L1 regularization\n",
    "    'scale_pos_weight': Real(1.0, 500.0, 'uniform'),     # Weighting of the minority class (Only for binary classification)\n",
    "        }"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1695b027",
   "metadata": {
    "papermill": {
     "duration": 0.030764,
     "end_time": "2021-08-08T10:32:42.308018",
     "exception": false,
     "start_time": "2021-08-08T10:32:42.277254",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "We then define the Bayesian optimization engine, providing to it our LightGBM, the search spaces, the evaluation metric, the cross-validation. We set a large number of possible experiments and some parallelism in the search operations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "f38d974f",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-08T10:32:42.373236Z",
     "iopub.status.busy": "2021-08-08T10:32:42.372607Z",
     "iopub.status.idle": "2021-08-08T10:32:42.377476Z",
     "shell.execute_reply": "2021-08-08T10:32:42.378090Z",
     "shell.execute_reply.started": "2021-08-06T13:18:42.39355Z"
    },
    "papermill": {
     "duration": 0.039139,
     "end_time": "2021-08-08T10:32:42.378258",
     "exception": false,
     "start_time": "2021-08-08T10:32:42.339119",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "opt = BayesSearchCV(estimator=clf,                                    \n",
    "                    search_spaces=search_spaces,                      \n",
    "                    scoring=roc_auc,                                  \n",
    "                    cv=skf,                                           \n",
    "                    n_iter=3000,                                      # max number of trials\n",
    "                    n_points=3,                                       # number of hyperparameter sets evaluated at the same time\n",
    "                    n_jobs=-1,                                        # number of jobs\n",
    "                    iid=False,                                        # if not iid it optimizes on the cv score\n",
    "                    return_train_score=False,                         \n",
    "                    refit=False,                                      \n",
    "                    optimizer_kwargs={'base_estimator': 'GP'},        # optmizer parameters: we use Gaussian Process (GP)\n",
    "                    random_state=0)                                   # random state for replicability"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e51cdf7a",
   "metadata": {
    "papermill": {
     "duration": 0.030839,
     "end_time": "2021-08-08T10:32:42.439955",
     "exception": false,
     "start_time": "2021-08-08T10:32:42.409116",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "Finally we runt the optimizer and wait for the results. We have set some limits to its operations: we required it to stop if it cannot get consistent improvements from the search (DeltaYStopper) and time dealine set in seconds (we decided for 45 minutes)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "d4001139",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-08T10:32:42.505133Z",
     "iopub.status.busy": "2021-08-08T10:32:42.504424Z",
     "iopub.status.idle": "2021-08-08T11:15:00.889453Z",
     "shell.execute_reply": "2021-08-08T11:15:00.890025Z",
     "shell.execute_reply.started": "2021-08-06T13:18:42.412421Z"
    },
    "papermill": {
     "duration": 2538.419719,
     "end_time": "2021-08-08T11:15:00.890655",
     "exception": false,
     "start_time": "2021-08-08T10:32:42.470936",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LightGBM took 2538.34 seconds,  candidates checked: 84, best CV score: 0.862 ± 0.008\n",
      "Best parameters:\n",
      "OrderedDict([('colsample_bytree', 0.3192137474960033),\n",
      "             ('learning_rate', 0.031216819794790598),\n",
      "             ('max_bin', 646),\n",
      "             ('max_depth', 131),\n",
      "             ('min_child_samples', 7),\n",
      "             ('min_child_weight', 6.73636179313144),\n",
      "             ('n_estimators', 2130),\n",
      "             ('num_leaves', 512),\n",
      "             ('reg_alpha', 0.00035764983218868946),\n",
      "             ('reg_lambda', 1.4663063535670735e-08),\n",
      "             ('scale_pos_weight', 1.0),\n",
      "             ('subsample', 0.8779916789359071),\n",
      "             ('subsample_freq', 4)])\n",
      "\n"
     ]
    }
   ],
   "source": [
    "overdone_control = DeltaYStopper(delta=0.0001)               # We stop if the gain of the optimization becomes too small\n",
    "time_limit_control = DeadlineStopper(total_time=60 * 45)     # We impose a time limit (45 minutes)\n",
    "\n",
    "best_params = report_perf(opt, X, y,'LightGBM', \n",
    "                          callbacks=[overdone_control, time_limit_control])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8efe9c3e",
   "metadata": {
    "papermill": {
     "duration": 0.031605,
     "end_time": "2021-08-08T11:15:00.953557",
     "exception": false,
     "start_time": "2021-08-08T11:15:00.921952",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# 5. Prediction on test data"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b6e34ab1",
   "metadata": {
    "papermill": {
     "duration": 0.031205,
     "end_time": "2021-08-08T11:15:01.016346",
     "exception": false,
     "start_time": "2021-08-08T11:15:00.985141",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "Having got the best hyperparameters for the data at hand, we instantiate a lightGBM using such values and train our model on all the available examples.\n",
    "<P>After having trained the model, we predict on the test set and we save the results on a csv file."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "89aac224",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-08T11:15:01.085871Z",
     "iopub.status.busy": "2021-08-08T11:15:01.085172Z",
     "iopub.status.idle": "2021-08-08T11:15:01.088101Z",
     "shell.execute_reply": "2021-08-08T11:15:01.087543Z",
     "shell.execute_reply.started": "2021-08-06T13:34:18.942198Z"
    },
    "papermill": {
     "duration": 0.040331,
     "end_time": "2021-08-08T11:15:01.088239",
     "exception": false,
     "start_time": "2021-08-08T11:15:01.047908",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "clf = lgb.LGBMClassifier(boosting_type='gbdt',\n",
    "                         metric='auc',\n",
    "                         objective='binary',\n",
    "                         n_jobs=1, \n",
    "                         verbose=-1,\n",
    "                         random_state=0,\n",
    "                         **best_params)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "8ed9adf2",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-08T11:15:01.155926Z",
     "iopub.status.busy": "2021-08-08T11:15:01.155235Z",
     "iopub.status.idle": "2021-08-08T11:15:21.849041Z",
     "shell.execute_reply": "2021-08-08T11:15:21.848516Z",
     "shell.execute_reply.started": "2021-08-06T13:34:18.951572Z"
    },
    "papermill": {
     "duration": 20.729497,
     "end_time": "2021-08-08T11:15:21.849185",
     "exception": false,
     "start_time": "2021-08-08T11:15:01.119688",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LGBMClassifier(colsample_bytree=0.3192137474960033,\n",
       "               learning_rate=0.031216819794790598, max_bin=646, max_depth=131,\n",
       "               metric='auc', min_child_samples=7,\n",
       "               min_child_weight=6.73636179313144, n_estimators=2130, n_jobs=1,\n",
       "               num_leaves=512, objective='binary', random_state=0,\n",
       "               reg_alpha=0.00035764983218868946,\n",
       "               reg_lambda=1.4663063535670735e-08, scale_pos_weight=1.0,\n",
       "               subsample=0.8779916789359071, subsample_freq=4, verbose=-1)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "0e16b863",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-08-08T11:15:21.918515Z",
     "iopub.status.busy": "2021-08-08T11:15:21.917519Z",
     "iopub.status.idle": "2021-08-08T11:15:54.219644Z",
     "shell.execute_reply": "2021-08-08T11:15:54.218985Z",
     "shell.execute_reply.started": "2021-08-06T13:34:40.198866Z"
    },
    "papermill": {
     "duration": 32.338975,
     "end_time": "2021-08-08T11:15:54.219800",
     "exception": false,
     "start_time": "2021-08-08T11:15:21.880825",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "submission = pd.DataFrame({'Id':ids, 'ACTION': clf.predict_proba(X_test)[:, 1].ravel()})\n",
    "submission.to_csv(\"submission.csv\", index = False)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.10"
  },
  "papermill": {
   "default_parameters": {},
   "duration": 2653.128588,
   "end_time": "2021-08-08T11:15:55.967412",
   "environment_variables": {},
   "exception": null,
   "input_path": "__notebook__.ipynb",
   "output_path": "__notebook__.ipynb",
   "parameters": {},
   "start_time": "2021-08-08T10:31:42.838824",
   "version": "2.3.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
